const NodeLib = {

  nodes: {},
  keywords: {},

  add: function (node) {

    this.nodes[node.name] = node;

  },

  addKeyword: function (name, callback, cache) {

    cache = cache !== undefined ? cache : true;

    this.keywords[name] = {callback: callback, cache: cache};

  },

  remove: function (node) {

    delete this.nodes[node.name];

  },

  removeKeyword: function (name) {

    delete this.keywords[name];

  },

  get: function (name) {

    return this.nodes[name];

  },

  getKeyword: function (name, builder) {

    return this.keywords[name].callback.call(this, builder);

  },

  getKeywordData: function (name) {

    return this.keywords[name];

  },

  contains: function (name) {

    return this.nodes[name] !== undefined;

  },

  containsKeyword: function (name) {

    return this.keywords[name] !== undefined;

  }

};

export {NodeLib};
